package fr.upstlse.glre.client.espaceperso.profil.action;

import com.extjs.gxt.ui.client.event.ComponentEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.widget.Info;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.google.gwt.user.client.rpc.AsyncCallback;

import fr.upstlse.glre.client.espaceperso.profil.EtudiantStage;
import fr.upstlse.glre.client.utilitaires.ControlerUtil;
import fr.upstlse.glre.client.vo.user.StageVOGWT;
import fr.upstlse.glre.client.widgets.fields.StageFields;

public class StageEditionSubmit extends SelectionListener<ComponentEvent> {

	StageVOGWT stage;
	StageFields stageFields;
	EtudiantStage etudiantStage;

	public StageEditionSubmit(StageFields stageFields,
			EtudiantStage etudiantStage) {
		super();

		this.stageFields = stageFields;
		this.etudiantStage = etudiantStage;
		this.stage = etudiantStage.getStage();
	}

	public void componentSelected(ComponentEvent ce) {
		stage.setIntitule((String) stageFields.getStageIntitule().getValue());
		stage.setDescription((String) stageFields.getStageDescription()
				.getValue());
		stage.getEntreprise().setNom(
				(String) stageFields.getStageEntrepriseNom().getValue());
		stage.getEntreprise().setMaitredestage(
				(String) stageFields.getStageEntrepriseMaitreDeStage()
						.getValue());
		stage.getEntreprise().setMaitredestageemail(
				(String) stageFields.getStageEntrepriseMaitreDeStageEmail()
						.getValue());
		stage.getEntreprise().getAdresse()
				.setVoie(
						(String) stageFields.getStageEntrepriseAdresseVoie()
								.getValue());
		stage.getEntreprise().getAdresse().setCodepostal(
				(String) stageFields.getStageEntrepriseAdresseCodePostal()
						.getValue());
		stage.getEntreprise().getAdresse().setVille(
				(String) stageFields.getStageEntrepriseAdresseVille()
						.getValue());
		stage.getEntreprise().getAdresse()
				.setPays(
						(String) stageFields.getStageEntrepriseAdressePays()
								.getValue());

		final MessageBox lInfoMessageBox = MessageBox.prompt("Information",
				"Mise à jour en cours...");
		AsyncCallback<Object> lCallback = new AsyncCallback<Object>() {

			public void onFailure(Throwable pCaught) {
				lInfoMessageBox.hide();
				MessageBox lFailureMessageBox = MessageBox.alert(
						"Erreur mise à jour", pCaught.getMessage(), null);
				lFailureMessageBox.show();
			}

			public void onSuccess(Object pResult) {
				lInfoMessageBox.hide();
				Info.display("Information", "Mis à jour avec succès", "");
				etudiantStage.readingMode();
				etudiantStage.getStagePanel().add(
						etudiantStage.getStageReadingPanel());
				etudiantStage.getStagePanel().layout();
				etudiantStage.getStagePanel().remove(
						etudiantStage.getStageEditingPanel());
				etudiantStage.getStagePanel().layout();
				etudiantStage.setEditionMode(false);
			}
		};

		ControlerUtil.getUserControlerServiceAsyncInstance().updateEtudiant(
				etudiantStage.getEtudiant(), lCallback);
	}

}
